import sys
input = sys.stdin.readline
def readList():
return list(map(int, input().split()))
def readInt():
return int(input())
def readInts():
return map(int, input().split())
def readStr():
return input().strip()
def solve():
n, A, B = readInt(), readList(), readList()
graph = [[] for _ in range(n)]
par = [-1] * n
for i in range(n):
if B[i] != -1:
graph[B[i]-1].append(i)
par[i] = B[i]-1
now, after = [], []
for i in range(n):
if B[i] == -1:
st = [(i, 0)]
while st:
node, exp = st.pop()
if exp:
if node == i:
now.append(node+1)
continue
if A[node] >= 0:
A[par[node]] += A[node]
now.append(node+1)
else:
after.append(node+1)
else:
st.append((node, 1))
for nei in graph[node]:
st.append((nei, 0))
print(sum(A))
print(*(now + after[::-1]))
return
solve()
1330A - Dreamoon and Ranking Collection | 1692B - All Distinct |
1156C - Match Points | 1675A - Food for Animals |
1328C - Ternary XOR | 1689A - Lex String |
1708B - Difference of GCDs | 863A - Quasi-palindrome |
1478A - Nezzar and Colorful Balls | 1581B - Diameter of Graph |
404A - Valera and X | 908A - New Year and Counting Cards |
146A - Lucky Ticket | 1594C - Make Them Equal |
1676A - Lucky | 1700B - Palindromic Numbers |
702C - Cellular Network | 1672C - Unequal Array |
1706C - Qpwoeirut And The City | 1697A - Parkway Walk |
1505B - DMCA | 478B - Random Teams |
1705C - Mark and His Unfinished Essay | 1401C - Mere Array |
1613B - Absent Remainder | 1536B - Prinzessin der Verurteilung |
1699B - Almost Ternary Matrix | 1545A - AquaMoon and Strange Sort |
538B - Quasi Binary | 424A - Squats |